import {PRE_REFRESH_TOKEN_SEC} from "@/config/constants";
import moment from "moment";
var Enc = require('@root/encoding/base64');


/**
 * 判断一个jwt token是否过期
 * @param jwtToken
 */
export function isJwtTokenExpire (jwtToken) {
  if (jwtToken) {
    const arr = jwtToken.split('.')
    const bodyStr = arr[1]
    const jsonstr = Enc.base64ToStr(bodyStr)
    const body = JSON.parse(jsonstr)
    const expireTime = (body.exp || 0) * 1000
    return expireTime < new Date().getTime()
  }
  // 如果没有token，直接视为过期
  return true
}

/**
 * 判断一个jwt token是否过期，判断依据是：当前时间未到真正过期时间 但 已到预过期时间
 * @param jwtToken
 */
export function isJwtTokenNearlyExpire (jwtToken) {
  // 只有有token才能判断是否过期
  if (jwtToken) {
    const arr = jwtToken.split('.')
    const bodyStr = arr[1]
    const jsonstr = Enc.base64ToStr(bodyStr)
    const body = JSON.parse(jsonstr)
    const stdExpireTime = (body.exp || 0) * 1000
    const preExpireTime = ((body.exp || 0) - PRE_REFRESH_TOKEN_SEC) * 1000
    const now = new Date().getTime()

    // 未到过期时间 且 快到过期时间
    const isPreExpire = now < stdExpireTime && now > preExpireTime

    console.debug('jwt过期时间： %o, 预过期时间：%o, 当前时间：%o, 是否预过期：%o',
      formatTime(stdExpireTime),
      formatTime(preExpireTime),
      formatTime(now),
      isPreExpire)

    return isPreExpire
  }
  return false
}

function formatTime (timestamp) {
  return moment(new Date(timestamp)).format('YYYY-MM-DD HH:mm:ss')
}


// function getClaimsFromToken() {
//   var token = $localStorage.token;
//   var user = {};
//   if (typeof token !== 'undefined') {
//     var encoded = token.split('.')[1];
//     user = JSON.parse(urlBase64Decode(encoded));
//   }
//   return user;
// }

